package com.qqtech.qquan.mall.dao;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.frame.dao.BaseDao;
import com.qqtech.qquan.mall.model.MallProduct;
import com.qqtech.qquan.mall.model.MallProductQuery;
import com.qqtech.qquan.mall.model.MallProductVo;

public interface MallProductDao extends BaseDao<MallProduct> {
	
	/**
	 * 后台查询
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageListAdmin(MallProduct query, Pageable pageable);
	
	/**
	 * 后台查询数量
	 */
	public int queryCountAdmin(MallProduct query);
	
	/**
     * 减少库存量
     *
     * @param productId
     * @param quantity
     * @return
     */
    int reduceStock(int productId, int quantity);

    /**
     * 增加库存量(订单取消时执行)
     * @param productId
     * @param quantity
     * @return
     */
    int addStock(int productId, int quantity);
    
    /**
     * 根据规格ID 获取商品信息
     * @param specId
     * @return
     */
    MallProduct getProductBySpecId(Integer specId);
    
    /**
     * FeedbackCount + 1
     * @param productId
     * @return
     */
    int updateFeedbackCount(Integer productId);
    
    /**
	 * 根据专区获取商品数据
	 * @param subject
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageBySubject(MallProductQuery subject, Pageable pageable);
	
	/**
	 *  根据专区获取商品数量
	 */
	public int queryCountBySubject(MallProductQuery query);
	
    /**
	 * 根据店铺查询商品数据
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageByShop(MallProductQuery query, Pageable pageable);
	
	/**
	 * 根据店铺查询数量
	 */
	public int queryCountByShop(MallProductQuery query);
	
	/**
	 * 查询店铺在销售的产品分类
	 * @param shopId 店铺id
	 * @return
	 */
	public List<MallProductVo> queryShopSellCategory(Integer shopId);
	
	/**
	 * 增加点击量
	 * @param productId
	 * @param pv
	 * @return
	 */
	int increasePv(int productId, int pv);
	
	/**
	 * 增加（减少）-关注（收藏）数量
	 * @param productId
	 * @param addCount
	 * @return
	 */
	int increaseConcern(Integer productId, int addCount);
	
}
